With some OPC servers or usage cases, it may be needed to specify the requested data type when writing into the item. Reasons for that may be e.g.:
In such cases you can pass the requested data type to the OPC server during writing.
There is an overload of the WriteItemValue extension method that allows you to pass in the requested data type.
// This example shows how to write a value into a single item, specifying its requested data type. // // Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . using System; using OpcLabs.BaseLib.ComInterop; using OpcLabs.EasyOpc.DataAccess; using OpcLabs.EasyOpc.OperationModel; namespace DocExamples.DataAccess._EasyDAClient { partial class WriteItemValue { public static void RequestedDataType() { // Instantiate the client object. var client = new EasyDAClient(); try { client.WriteItemValue("", "OPCLabs.KitServer.2", "Simulation.Register_I4", 12345, VarTypes.I4); // <-- the requested data type } catch (OpcException opcException) { Console.WriteLine("*** Failure: {0}", opcException.GetBaseException().Message); } } } }
# This example shows how to write a value into a single item, specifying its requested data type. # # Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . # OPC client and subscriber examples in Python on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-Python . # The QuickOPC package is needed. Install it using "pip install opclabs_quickopc". import opclabs_quickopc # Import .NET namespaces. from OpcLabs.BaseLib.ComInterop import * from OpcLabs.EasyOpc.DataAccess import * from OpcLabs.EasyOpc.OperationModel import * # Instantiate the client object. client = EasyDAClient() # Perform the operation try: IEasyDAClientExtension.WriteItemValue(client, '', 'OPCLabs.KitServer.2', 'Simulation.Register_I4', 12345, VarType(VarTypes.I4)) # <-- the requested data type except OpcException as opcException: print('*** Failure: ' + opcException.GetBaseException().Message, sep='') exit() print('Finished.')
' This example shows how to write a value into a single item, specifying its requested data type. ' ' Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . Imports OpcLabs.BaseLib.ComInterop Imports OpcLabs.EasyOpc.DataAccess Imports OpcLabs.EasyOpc.OperationModel Namespace DataAccess._EasyDAClient Partial Friend Class WriteItemValue Public Shared Sub RequestedDataType() Dim client = New EasyDAClient() Try client.WriteItemValue("", "OPCLabs.KitServer.2", "Simulation.Register_I4", 12345, VarTypes.I4) ' <-- the requested data type Catch opcException As OpcException Console.WriteLine("*** Failure: {0}", opcException.GetBaseException().Message) Exit Sub End Try End Sub End Class End Namespace
The DAItemValueArguments objects that you pass to the WriteMultipleItemValues method contain an ItemDescriptor, in which you can modify the RequestedDataType property as needed.
// Shows how to write into multiple OPC items using a single method call, specifying their requested data types. // // Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . using System; using System.Diagnostics; using OpcLabs.BaseLib.ComInterop; using OpcLabs.BaseLib.OperationModel; using OpcLabs.EasyOpc.DataAccess; using OpcLabs.EasyOpc.DataAccess.OperationModel; namespace DocExamples.DataAccess._EasyDAClient { partial class WriteMultipleItemValues { public static void RequestedDataType() { // Instantiate the client object. var client = new EasyDAClient(); Console.WriteLine("Writing multiple item values..."); OperationResult[] resultArray = client.WriteMultipleItemValues(new[] { new DAItemValueArguments("", "OPCLabs.KitServer.2", "Simulation.Register_I2", 12345) { ItemDescriptor = { RequestedDataType = VarTypes.I2}}, // <-- the requested data type new DAItemValueArguments("", "OPCLabs.KitServer.2", "Simulation.Register_R4", 234.56) { ItemDescriptor = { RequestedDataType = VarTypes.R4}} // <-- the requested data type }); for (int i = 0; i < resultArray.Length; i++) { Debug.Assert(resultArray[i] != null); if (resultArray[i].Succeeded) Console.WriteLine("Result {0}: success", i); else { Debug.Assert(!(resultArray[i].Exception is null)); Console.WriteLine("Result {0} *** Failure: {1}", i, resultArray[i].ErrorMessageBrief); } } Console.WriteLine("Reading multiple item values..."); ValueResult[] valueResultArray = client.ReadMultipleItemValues("OPCLabs.KitServer.2", new DAItemDescriptor[] { "Simulation.Register_I2", "Simulation.Register_R4" }); for (int i = 0; i < valueResultArray.Length; i++) { Debug.Assert(valueResultArray[i] != null); Console.WriteLine("valueResultArray[{0}]: {1}", i, valueResultArray[i]); } } } }
# Shows how to write into multiple OPC items using a single method call, specifying their requested data types. # # Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . # OPC client and subscriber examples in Python on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-Python . # The QuickOPC package is needed. Install it using "pip install opclabs_quickopc". import opclabs_quickopc # Import .NET namespaces. from OpcLabs.BaseLib.ComInterop import * from OpcLabs.EasyOpc import * from OpcLabs.EasyOpc.DataAccess import * from OpcLabs.EasyOpc.DataAccess.OperationModel import * from OpcLabs.EasyOpc.OperationModel import * # Instantiate the client object. client = EasyDAClient() print('Writing multiple item values...') arguments1 = DAItemValueArguments(ServerDescriptor('OPCLabs.KitServer.2'), DAItemDescriptor('Simulation.Register_I2'), 12345) arguments1.ItemDescriptor.RequestedDataType = VarType(VarTypes.I2) # <-- the requested data type arguments2 = DAItemValueArguments(ServerDescriptor('OPCLabs.KitServer.2'), DAItemDescriptor('Simulation.Register_R4'), 234.56) arguments2.ItemDescriptor.RequestedDataType = VarType(VarTypes.R4) # <-- the requested data type operationResultArray = client.WriteMultipleItemValues([arguments1, arguments2]) for i, operationResult in enumerate(operationResultArray): assert operationResult is not None if operationResult.Succeeded: print('operationResultArray[', i, ']: success', sep='') else: assert operationResult.Exception is not None print('operationResultArray[', i, '] *** Failure: ', operationResult.ErrorMessageBrief, sep='') print('Reading multiple item values...') try: valueResultArray = IEasyDAClientExtension.ReadMultipleItemValues(client, ServerDescriptor('OPCLabs.KitServer.2'), [ DAItemDescriptor('Simulation.Register_I2'), DAItemDescriptor('Simulation.Register_R4'), ]) except OpcException as opcException: print('*** Failure: ' + opcException.GetBaseException().Message, sep='') exit() for i, valueResult in enumerate(valueResultArray): assert valueResult is not None if valueResult.Succeeded: print('valueResultArray[', i, '].Value: ', valueResult.Value, sep='') else: assert valueResult.Exception is not None print('valueResultArray[', i, '] *** Failure: ', valueResult.ErrorMessageBrief, sep='') print('Finished.')
' Shows how to write into multiple OPC items using a single method call, specifying their requested data types. ' ' Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . Imports OpcLabs.BaseLib.ComInterop Imports OpcLabs.EasyOpc.DataAccess Imports OpcLabs.EasyOpc.DataAccess.OperationModel Namespace DataAccess._EasyDAClient Partial Friend Class WriteMultipleItemValues Public Shared Sub RequestedDataType() Dim client = New EasyDAClient() Console.WriteLine("Writing multiple item values...") Dim resultArray = client.WriteMultipleItemValues(New DAItemValueArguments() { _ New DAItemValueArguments("", "OPCLabs.KitServer.2", "Simulation.Register_I2", 12345) With _ {.ItemDescriptor = New DAItemDescriptor() With {.RequestedDataType = VarTypes.I2}}, _ New DAItemValueArguments("", "OPCLabs.KitServer.2", "Simulation.Register_R4", 234.56) With _ {.ItemDescriptor = New DAItemDescriptor() With {.RequestedDataType = VarTypes.R4}} _ }) For i = 0 To resultArray.Length - 1 Debug.Assert(resultArray(i) IsNot Nothing) If resultArray(i).Succeeded Then Console.WriteLine("Result {0}: success", i) Else Debug.Assert(resultArray(i).Exception IsNot Nothing) Console.WriteLine("Result {0} *** Failure: {1}", i, resultArray(i).ErrorMessageBrief) End If Next i Console.WriteLine("Reading multiple item values...") Dim valueResultArray = client.ReadMultipleItemValues("OPCLabs.KitServer.2", New DAItemDescriptor() {"Simulation.Register_I2", "Simulation.Register_R4"}) For i = 0 To valueResultArray.Length - 1 Debug.Assert(valueResultArray(i) IsNot Nothing) Console.WriteLine("valueResultArray[{0}]: {1}", i, valueResultArray(i)) Next i End Sub End Class End Namespace
Specifying the data type is also possible, in a similar manner, when Writing value, timestamp and quality (OPC Classic).
Copyright © 2004-2024 CODE Consulting and Development, s.r.o., Plzen. All rights reserved. Web page: www.opclabs.com
Send Documentation Feedback. Resources: Knowledge Base, Product Downloads. Technical support: Online Forums, FAQ.Missing some example? Ask us for it on our Online Forums! You do not have to own a commercial license in order to use Online Forums, and we reply to every post.